\chapter{TÉCNICA PROPOSTA}\label{cap:tecnicaproposta}

%\noindent Para aquisição de um modelo mais real possível, na construção do personagem,
%dever-se-ia construir uma estrutura mais detalhada do personagem, porém isso tornaria inviável a simulação física devido à alta quantidade dos graus de
%liberdade que se deveriam considerar e devido à elevada complexidade para a aquisição dos controladores dinâmicos para gerir a animação do personagem.
%Então em vez de se detalhar a estrutura do personagem, na simulação física, se procura simplificar o modelo desejando um resultado mais próximo possível
%do resultado real esperado.

%A simulação de personagens virtuais guiada por dados de MoCap possui algumas dificuldades, pelo fato dos dados capturados, em um ator real, 
%não possuírem as mesmas medidas estruturais do personagem no ambiente virtual e não possuírem também informações relacionadas às forças de contato com os pés com o solo.
%Mesmo que estes dados não possuam informações totalmente válidas eles servem como uma referência a se tomar. Como se pode observar na Figura \ref{fig:expressopolar},
%a posição da mão e os tamanhos das partes do corpo são diferentes em relação do ator com o personagem virtual, porém o resultado desejado foi alcançado.

%\begin{figure}[!htbp]
%     \begin{center}
%     \includegraphics[width=12cm]{expressopolar.png}
%     \caption{Comparação com a posição de um ator (à esquerda) com o personagem virtual com os dados de MoCap (à direita).} 
%     \label{fig:expressopolar}
%     \end{center}
%\end{figure}

%Explicando pq tirei essa figura!
%Se as dimensões são diferentes, ou quiseram colocar diferentes mesmo, ou nao deram importancia suficiente para isso.
%Além disso, há garantias de que essas imagens representam exatamente o mesmo instante de tempo da animação? as cameras real e virtual estao extamente na mesma posicao?
%Eu estava me referindo a consequencias relacionadas ao simular o personagem fisicamente, pois reproduzir os dados capturados cinematicamente é mais facil

\noindent Na área de controle de movimento humano baseado em física, a modelagem usada para representar o personagem simulado geralmente consiste de um sistema de
corpos rígidos articulados com atuadores internos localizados em suas juntas. Considerando essa modelagem suficiente para capturar os aspectos fundamentais
do sistema musculoesqueletal humano, pesquisadores têm desenvolvido vários controladores capazes de produzir movimentos para várias tarefas envolvendo equilíbrio.
Embora esses controladores tenham funcionado com sucesso para seus propósitos, essa modelagem simplificada ainda não consegue atingir o mesmo nível de
habilidade que o corpo humano real desempenha.
%Como um indício desse fato, pode-se dizer que uma tendência em se investir em modelagens mais robustas esteja surgindo.
Como uma evidência desse fato, modelagens mais robustas têm sido propostas para personagens simulados \cite{bib:Jain11,bib:Wang12}.

Quando usando movimentos capturados como referência, outras preocupações surgem, pois as propriedades físicas do personagem precisam ser definidas de acordo com
as do ator real. Devido às simplificações relacionadas à modelagem do personagem, não é possível representar o ator fielmente na simulação.
A interação dos pés com o chão também é simulada de maneira simplificada, o que faz com que o chão virtual exerça forças de contato diferentes das que
o chão real exerce no pé do ator.
Portanto, apesar de servirem como referência, os dados capturados são teoricamente inválidos do ponto de vista físico. %dinâmico.
Embora não haja problemas quando se deseja apenas reproduzir cinematicamente os dados capturados, essas diferenças entre o real e o virtual exigem, em uma simulação
física, controladores mais robustos capazes de compensar essas inconsistências.

%Outra dificuldade apontada na concepção da simulação está em não se possuírem atuadores diretos nos graus de liberdade globais do personagem --
%posição do COM e orientação global. Por exemplo,
%como se pode manipular a direção em que o personagem está caminhando sem a informação da orientação global do personagem? Na ausência dessa informação,
%procura-se controlar os DOFs globais indiretamente com o uso de atuadores internos e pela interação dos pés do personagem com o solo, que é a proposta
%deste método. Na procura por sanar as dificuldades impostas no relacionamento entre o personagem real e o personagem virtual procurou-se tentar modelar
%o personagem virtual o mais próximo e simples possível do modelo real e focar no efeito desejado para a animação.

%Dificuldades em SIMULAR um personagem virtual (tratamento de equilibrio)
%  -os DOFs globais nao possuem atuadores diretos (sistema underactuated)
%    -controlados indiretamente pelos atuadores internos e interacao dos pes com o chao
%  -interação entre os pés e o chão, principalmente devido à modelagem simplificada da geometria dos pés
Além da modelagem usada para o personagem, outro aspecto importante que influencia o equilíbrio é o fato de os graus de liberdade (DOFs) globais do personagem
não possuírem atuadores diretos.
Eles são controlados indiretamente pelos atuadores internos das juntas e pela interação dos pés com o chão.
Enquanto a atuação interna está associada ao controlador utilizado, a interação dos pés com o chão, que depende de como o contato é tratado na simulação, está
fortemente associada à geometria usada para representar o pé do personagem simulado.
%
%Jacobiana: Introducao para explicar ao leitor o termo "dessa suposição" (corpo raiz fixo)
%  -Note que o que se deseja é compensar o torque que o pe aplica no chao
%  -O uso da jacobiana assume que a base (o corpo raiz) esteja fixa/parada. Na prática, pelo menos quase fixa.
%  -Do ponto de vista de uma simulação física, isso significa que, para que o pé se mantenha parado, o torque resultante na base deve ser (praticamente) nulo.
%   Portanto, qualquer torque aplicado no pé (na base) deve ser compensado por toques provenientes da interação do pé com o chão (da base com a superfície de contato).
%   Analisando com mais detalhes, aplicar torques internos no tornozelo implica em aplicar um torque desejado na perna do personagem e um torque contrário no pé.
%   Esse torque aplicado no pé, pelo fato de estar em contato com o chão, resulta em forças de ação e reação exercidas mutuamente pelo pé e pelo chão.
%   Quando o torque aplicado no pé é totalmente transferido para o chão, a reação do chão consegue compensar esse torque e o pé se mantém parado, como assumido pelo uso da jacobiana.
%  -É fácil perceber que a compensação desses torques, responsável por manter o pé como uma base fixa, depende diretamente da geometria usada para modelar o pé e
%   da técnica de interação responsável por simular fisicamente o contato entre o pé e o chão.
Mas antes de analisar a influência da geometria do pé no equilíbrio, é importante contextualizar melhor o problema a ser atacado.
Muitos trabalhos utilizam uma Jacobiana como uma camada de abstração para simplificar o tratamento de equilíbrio (ver Seção \ref{secao que fala sobre a Jacobiana com mais detalhes}),
e é necessário recapitular alguns aspectos importantes relacionados ao uso dessa Jacobiana. %para simplificar/facilitar o tratamento de equilíbrio.

A motivação principal de se usar a Jacobiana nesse contexto é justamente permitir que os DOFs globais do personagem possam ser controlados diretamente. %, a fim de facilitar o controle.
Entretanto, esse controle direto, como foi dito, apenas corresponde a uma abstração do controle, e no final das contas ainda dependerá da interação entre os pés e o chão.
%
Mais especificamente, esse controle direto é geralmente realizado sobre o COM do personagem, através do uso de forças e torques virtuais. %uso/cálculo
O termo virtual é utilizado porque essas forças e torques não são diretamente aplicados como forças externas ``reais''.
Em vez disso, eles são convertidos em torques internos correspondentes nas juntas, que teriam o mesmo efeito sob certas condições.
%
Note que a principal condição é que o pé do personagem (ou seja, a base da cadeia de corpos considerada na Jacobiana) esteja fixo, e não há qualquer garantia %base/raiz
de que \textbf{essa suposição} será satisfeita. O uso da Jacobiana portanto assume que o pé esteja praticamente parado.
Do ponto de vista de uma simulação física, isso significa que o torque resultante no pé deve ser praticamente nulo.
Ou seja, qualquer torque aplicado no pé deve ser compensado por torques provenientes da interação do pé com o chão. %(da base com a superfície de contato).

Analisando com mais detalhes, aplicar torques internos no tornozelo implica em aplicar um torque desejado na perna do personagem e um torque contrário no pé.
Como o pé está em contato com o chão, forças de ação e reação são trocadas entre o pé e o chão.
Quando o torque aplicado no pé é totalmente transferido para o chão, as forças de reação exercidas pelo chão conseguem compensar completamente esse torque e
o pé se mantém parado, como assumido pelo uso da Jacobiana.
Neste ponto, fica fácil perceber que a compensação desses torques aplicados no pé, responsável por mantê-lo como uma base fixa, depende diretamente da geometria
usada para modelá-lo. %e da técnica de interação responsável por simular fisicamente o contato entre o pé e o chão.
Ou seja, a modelagem do pé possui uma enorme influência no quanto do torque aplicado nele será compensado pelo chão. %compensado/absorvido/tranferido

%pé flexível vs pé rígido
Por exemplo, embora um personagem representado apenas por corpos rígidos, como comumente é feito, seja ideal para simular eficientemente o movimento humano,
colisões entre corpos rígidos são altamente descontínuas, o que dificulta a simulação do contato do pé e, consequentemente, o projeto de controladores, podendo resultar
em movimentos não naturais.
%Uma vertente mais direta, porém mais difícil, consiste em tentar melhorar essa modelagem, tentando se aproximar o máximo possível do real.
Note que o pé real, por possuir um tecido flexível e uma geometria bem mais complexa do que as geometrias geralmente utilizadas em simulações, permite que o equilíbrio seja tratado
de uma maneira mais fácil.
\cite{bib:Jain11} comprova isso mostrando que controladores já existentes se tornam mais robustos apenas pelo fato de se usar corpos flexíveis na simulação de contatos.
Ou seja, considerando uma melhor interação entre os pés e o chão, controladores menos sofisticados já seriam capazes de tratar o equilíbrio de maneira apropriada.

%Mostrar a influência de diferentes geometrias usadas para o pé simulado na garantia "dessa suposição" (pé preso numa bota, pé de pato, pé real, pé Liu, pé box, perna de pau)
%  -comparar uma pessoa andando normal com uma pessoa andando usando uma perna de pau.
%  -com um pe mais capaz de compensar esse torque, o equilibrio fica mais facil => a estrategia de controle nao precisa ser tao robusta
  %A melhor configuração para o uso da Jacobiana é que o pé esteja fixo ao solo, por exemplo, ao considerar ganchos fixando o pé ao solo. Nessa
  %configuração todo o torque aplicado do pé contra o solo seria absorvido. No entanto, essa configuração foge um pouco da realidade.
Imaginar diferentes possibilidades de modelagem do pé %contato entre o pé e o chão
pode ajudar a compreender melhor o %melhorar o entendimento/a percepção do %enfatizar o
relacionamento dessa modelagem com o quanto do torque aplicado no pé é compensado.
Imagine, por exemplo, uma situação em que o pé esteja fixo ao solo. Isso corresponderia a prender o pé ao solo através de ganchos, ou calçar um sapato colado no chão.
Essa seria a situação mais estável possível, em que todo o torque aplicado no pé seria absorvido pelo solo.
No outro extremo, imagine alguém usando pernas de pau. %Qualquer torque aplicado ao pé pode fazer com que a suposição da Jacobiana seja desobedecida.
%O que acontece quando o torque não é compensado? O pé se move e acaba deslizando no chão, o que provoca a perda do equilíbrio.
Qualquer torque aplicado na base pode fazer com que ela se mova e deslize no chão, provocando a perda do equilíbrio.
Já quando comparando a geometria do pé normalmente usada em simulações (um paralelepípedo) a um pé real flexível, pode-se perceber que a geometria do pé simulado é mais instável.
Ou seja, essas simulações apresentam condições menos propícias para que os torques aplicados no pé sejam compensados, exigindo um controlador de equilíbrio mais elaborado.

%-Podemos pensar em 2 abordagens possiveis para tratar essas dificuldades:
%  -tentar modelar o virtual o mais proximo possivel do real
%  -focar no efeito desejado, simplificando o problema (de interação entre o personagem e o ambiente)
%-Focando no pé
%  -ao contrario de [artigos que detalham mais a geometria do pe - exs Wang; Liu, 2012],
%   nós queremos focar no efeito desejado, simplificando a interacao entre o pe e o chao.
%  -Comparando mais precisamente a [Liu, 2012], ao inves de tentar modelar o pe usando uma geometria
%   mais detalhada (cada vez mais proxima ao real), no caso usando uma malha deformavel,
%   com o objetivo de compensar melhor esse torque, propomos tratar diretamente a compensacao desse torque,
%   ou seja, o efeito desejado.
%  *-Resumidamente, propomos desacoplar a modelagem do pe e a interacao entre o pe e o chao.
  %Encarando a possibilidade de que o pé do personagem esteja vinculado a uma perna de pau ou a um pé de pato, pode-se observar que dependendo dessa configuração
  %tem-se uma melhor ou pior estabilidade no contato do pé.
  %Na estrutura de contato da raiz da Jacobiana observaram-se diferentes abordagens na estrutura de interação do pé do personagem com o solo. 
  %Na concepção de uma estrutura simples para essa interação abandonou-se o uso de estruturas complexas do pé, em que se detalha a geometria 
  %(vide a Figura \ref{fig:footmodel}). Fazendo referência ao trabalho de \cite{bib:Jain11}, em que os autores modelaram o pé de forma mais detalhada 
  %(próxima ao real), no caso usando uma malha deformável, com o objetivo de compensar melhor o torque do pé com o chão.
  %Foi proposto neste trabalho tratar diretamente a compensação desse torque, desacoplando a modelagem do pé e a interação do pé com o solo (Seção 4.4).
  %O uso de simplificações neste contato é uma alternativa bastante utilizada para a aproximação do contato real em um ambiente simulado
  %(ABE, SILVA \& POPOVIĆ, \citeyear{bib:Abe07}; MACCHIETTO, ZORDAN \& SHELTON, \citeyear{bib:Macchietto09}), observando que ainda não é possível englobar em um único modelo todos 
  %os tipos de situações que podem surgir.

\begin{figure}[htbp]
\centering 
\subfloat[]{\includegraphics[height=3.5cm]{footWang.png}}\label{fig:footwang}
\hspace{1.5cm}
\subfloat[]{\includegraphics[height=3.5cm]{footJain.png}}\label{fig:footjain}
\caption{Detalhamento da geometria do pé. (a) Modelo do pé utilizado por \cite{bib:Wang09}. (b) Modelo do pé utilizado por \cite{bib:Jain11}.}
\label{fig:footmodel}
\end{figure}

Entendido que, dependendo da modelagem do pé, tem-se uma melhor ou pior estabilidade no seu contato com o chão, pode-se pensar em duas abordagens para melhorar essa estabilidade.
%
Uma vertente mais previsível, porém mais difícil de se implementar, consiste em tentar melhorar essa modelagem, tentando se aproximar o máximo possível do real.
A Figura \ref{fig:footmodel} ilustra dois trabalhos seguindo essa ideia. \cite{bib:Wang09} articula o pé usando dois corpos rígidos e \cite{bib:Jain11} utiliza um pé deformável.
Já \cite{bib:Geijtenbeek12}, usa um pé com dimensões maiores para tentar estabilizar melhor o contato.

Neste trabalho, uma nova vertente é vislumbrada. Resumidamente, propõe-se desvincular a modelagem do pé usada na simulação da sua interação com o chão.
Note que o que se deseja da interação com o chão é que o torque aplicado no pé seja compensado ao máximo, considerando obviamente as limitações do pé humano.
Fazer com que a geometria do pé não influencie sua interação com o chão simplifica bastante essa compensação, e isso é possível em uma simulação. %em um mundo virtual.

Uma solução bastante direta e fácil seria compensar artificialmente todo torque aplicado no pé de apoio, proveniente do uso da Jacobiana.
%Uma vez que as forças e os torques virtuais são convertidos, através do uso da Jacobiana transposta, obtém-se os torques internos correspondentes nas juntas.
Na simulação, isso significaria simplesmente não aplicar torque algum no pé de apoio (corpo raiz da Jacobiana), mantendo-o parado.
%Ou seja, aplicar um torque externo para compensar todo o torque aplicado no pé de apoio.
%O torque aplicado no pé de apoio é proveniente do torque aplicado internamente no tornozelo cujo pé está apoiado no chão.
O problema é que, a não ser que o pé realmente estivesse preso ao chão, isso seria fisicamente incorreto, desde que os torques no pé seriam compensados mesmo em situações impossíveis.
O personagem seria bastante estável, mas possuiria ``superpoderes''.
%
Portanto, em vez de aplicar essa solução que trata apenas a situação mais estável possível, deseja-se definir uma modelagem de contato para a raiz da Jacobiana de forma a englobar
todas as diferentes situações, desde um contato em que todos os torques são absorvidos pelo solo (pés presos) a um contato em que a geometria do pé não é capaz de
compensar quase nenhum torque (usando pernas de pau, por exemplo).

\begin{figure}[htbp]
\centering
\includegraphics[width=12cm]{geometriaparametrica.png}
\caption{A geometria paramétrica do pé proposta permite ao usuário balancear estabilidade e corretude física da simulação.}
\label{fig:EstabVsCorrFis}
\end{figure}

Este trabalho propõe um modelo simplificado do pé usando uma geometria paramétrica. %generalizada.
%, desacoplando a modelagem do pé da geometria e da interação do pé com o solo no ambiente simulado.
Essa geometria paramétrica permite que o pé seja modelado de forma genérica, de acordo com o desejo do usuário.
Baseado no \emph{cone de fricção de Coulomb}, os parâmetros influenciam o cálculo do torque máximo que pode ser compensado no pé,
permitindo que o usuário balanceie estabilidade e corretude física.
%garantindo assim a melhor fixação da raiz da Jacobiana no controle de equilíbrio.
Ou seja, fica a critério do usuário escolher diferentes variações entre um controlador bastante estável e fisicamente incorreto e
um controlador mais instável e fisicamente correto (Figura \ref{fig:EstabVsCorrFis}).

Note que, em alguns casos mais estáveis do que aqueles permitidos pela geometria do pé usada na simulação, o movimento gerado ainda pode ser considerado fisicamente correto.
Nesses casos, apenas a geometria usada é que não está adequada ao movimento desejado.
Entretanto, se a geometria usada fosse melhorada de uma maneira realista, a fim de aumentar a estabilidade, o movimento anteriormente gerado seria validado.
Portanto, a corretude física do movimento que seria gerado, caso uma geometria mais apropriada fosse usada, independe da geometria usada de fato.
%
Note também que, no caso mais instável, em que nenhum torque é compensado artificialmente, o torque aplicado no pé ainda pode ser compensado
pela interação entre a geometria do pé usada na simulação e o chão.
%
%Levar para a Seção \ref{simplespe}?
Portanto, a geometria paramétrica é independente da geometria usada na simulação. A ideia é obter diretamente o efeito desejado de se usar uma geometria mais detalhada, %obter/atacar
que é compensar efetivamente o torque aplicado no pé de apoio, mas sem se preocupar com a geometria de fato utilizada na simulação.
%
O significado dos parâmetros usados e a relação entre o modelo proposto para o pé e o cone de fricção de Coulomb são discutidos com mais detalhes na Seção \ref{simplespe}.

%Contribuicao da Momentum Jacobian
%
%COM como um único efetor final vs varios efetores finais que, juntos, influenciarão proporcionalmente, de acordo com suas massas, o COM do personagem
%
%Danilo
  %Como visto anteriormente, a Jacobiana é um dos principais meios para se controlar posições virtuais no alcance de objetivos, entre eles o de
  %manter o equilíbrio. Neste trabalho a matriz Jacobiana é inserida para gerir o controle de equilíbrio cujo personagem aja de forma mais natural
  %possível, a estratégia foi utilizar todos os corpos do personagem para manutenção do seu equilíbrio. Para fazer com que isso seja possível, 
  %procurou-se considerar a contribuição de todos os corpos sobre o COM do personagem. Em consequência disso, a construção da Jacobiana, que é 
  %utilizada na IK considerando um único effetor final teve que ser reestruturada para se considerar todos os corpos do personagem como effetores
  %finais, que, todos juntos, contribuirão proporcionalmente com suas massas para o posicionamento do COM do personagem. No entanto, a suposição
  %para a inserção da Jacobiana tem que ser mantida, ou seja, a base tem que estar fixa. Usualmente a raiz utilizada na manutenção do equilíbrio
  %são os pés do personagem e a forma como foi realizada a modelagem do contato dos pés com o solo influencia diretamente no controle de equilíbrio.
  %Observando-se que a Jacobiana relaciona a posição do Centro de Massa de cada corpo do personagem e não a geometria de cada corpo, para aplicação
  %de torques, por isso a premissa de que a base esteja fixa deve ser mantida, para que a função desempenhada com o uso da Jacobiana seja realizada
  %efetivamente.
%
%Email
  %Acredito que seja a possibilidade de trabalhar o personagem como um todo
  %para manipular o COM, ao inves de apenas os membros inferiores.
  %Na jacobiana normal, como em Coros 2010, acho q o COM eh tratado
  %simplesmente como um unico efetor final.
  %Nesse caso, como o pulso contribuiria com o posicionamento do COM, por
  %exemplo? Eu imaginaria uma cadeia independente com a mao sendo a raiz, o q
  %nao faria sentido intuitivamente, a nao ser q a mao tivesse em contato com
  %uma superficie...
  %Acho que por isso q eles usam cadeia vindo apenas a partir dos pes...
  %
  %No nosso caso, cada corpo eh tratado como um efetor final, que, todos
  %juntos, contribuirao proporcionalmente com suas massas para o
  %posicionamento do COM. Assim, eh possivel ter a contribuicao adequada do
  %pulso apenas na mao, e a mao, por sua vez, contribuira proporcionalmente
  %com o COM, obedecendo uma hierarquia consistente pre-definida.
%
Uma outra contribuição deste trabalho consiste no uso de uma Jacobiana mais completa, baseada no momento do personagem em relação ao seu COM.
Na Jacobiana comumente usada para tratamento de equilíbrio, como em \cite{bib:Coros10}, o COM é tratado como um simples e único efetor final. %simplesmente como um único efetor final.
Assim, apenas as juntas situadas na hierarquia entre a raiz e o COM possuem influência sobre ele.
No caso em que os pés são as raizes da hierarquia, o COM é influenciado basicamente pelos membros inferiores.
Como o pulso poderia contribuir com o posicionamento do COM, por exemplo?
A não ser que a mão estivesse em contato com alguma superfície, sendo portanto raiz de uma outra cadeia de corpos, o pulso não tem como influenciar o COM.
O uso da Jacobiana baseada no momento permite que o personagem seja trabalhado como um todo para manipular o COM.
A ideia é tratar cada corpo como um efetor final. Assim, todos os corpos influenciarão proporcionalmente, de acordo com suas massas, o COM do personagem.
No caso do pulso, por exemplo, embora influenciando apenas a mão, ele também contribuirá indiretamente, já que a mão, sendo um efetor final, influenciará o COM.

\begin{figure}%[H]
     \begin{center}
     \includegraphics[width=16cm]{visaogeral.png}
     \caption{Visão geral do controlador.}
     \label{fig:visaogeral}
     \end{center}
\end{figure}

%Visao geral
A Figura \ref{fig:visaogeral} apresenta uma visão geral do controlador. A estrutura do controlador (apresentado como uma caixa preta na Figura \ref{fig:esqcontrolador})
proposto neste trabalho possui três componentes principais: Controladores PD, Controlador de Equilíbrio e Modelo Simplificado do Pé.
%A robustez do método é caracterizada pela união dessas três partes.
Os controladores PD são responsáveis por fazer com que as poses fornecidas pelos dados de MoCap ou pelo usuário sejam alcançadas.
Para isso, torques internos são aplicados nas juntas do personagem de acordo com uma hierarquia que considera a pélvis como a raiz (ver Apêndice \ref{ap:modelo}).
Entretanto, tal componente não controla os DOFs globais do personagem.
Os DOFs globais são controlados através de forças e torques virtuais que são ``aplicados'' no COM do personagem.
O controlador de equilíbrio fica responsável por determinar essas forças e torques virtuais e convertê-los em torques internos equivalentes, %equivalentes/correspondentes
por meio do uso da Jacobiana transposta. A matriz Jacobiana é montada de acordo com uma hierarquia que considera o pé de apoio como a raiz (ver Apêndice \ref{ap:hierarquia}).
Por último, baseado em um modelo simplificado do pé, o torque aplicado no pé de apoio (ou parte dele) é compensado artificialmente, com o intuito de aumentar a
estabilidade da sua interação com o chão e, consequentemente, facilitar o controle do equilíbrio. %da sua interação/do seu contato
%
%Organização do capítulo
%Neste capítulo, o controle da simulação para personagens bípedes com estrutura de equilíbrio adotando um modelo simplificado para o pé é apresentado.
%É apresentado o controle da simulação dividido em três seções. 
%Na Seção \ref{controlpd3d}, são detalhados
%os controladores PD para juntas esféricas, que têm como finalidade levar a configuração dos graus de liberdade atuais do personagem para uma configuração dos
%graus de liberdade desejados -- todos os ângulos das juntas do personagem. Na Seção \ref{controlequilibrio}, é abordado o processo de construção
%da matriz Jacobiana cujo objetivo é fazer com que todos os corpos do personagem possam influenciar na estratégia do seu equilíbrio. É delineado, 
%na Seção \ref{simplespe}, o modelo simplificado do pé que objetiva a estabilidade do personagem. Por fim, algumas considerações finais 
%são feitas na Seção \ref{modeloconsideracao}.
Cada um dos três componentes do controlador são discutidos com mais detalhes nas seções a seguir.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Controladores PD para Juntas Esféricas}\label{controlpd3d}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\noindent Na Subseção \ref{controlepd}, fora visto como funcionam os controladores PD.
Em resumo, os controladores PD calculam torques de acordo com a Equação \ref{eq:toquepd}.
O torque $\tau$ calculado deve ser aplicado por um atuador interno, vinculado à respectiva junta,
que funciona aplicando $\tau$ no seu corpo filho e -$\tau$ no seu corpo pai.
%No caso de estruturas articuladas 3D, $\tau$ é um vetor de dimensão 3 x 1, que deve ser representado em coordenadas globais. Portanto, todas as variáveis
%da equação devem ser definidas nesse mesmo sistema de coordenadas. Alternativamente,
%pode-se também definir todas as variáveis em coordenadas da junta e depois converter o torque
%resultante para coordenadas globais \cite{bib:NunesTese12}.

A implementação dos controladores PD é baseada em \cite{bib:NunesTese12}, e quatérnios são usados para representar as orientações 3D.
Considerando apenas juntas esféricas, cada torque aplicado a uma junta $i$ é dado por:
%
\begin{equation}
 ^{i}\tau_{pd} = k_{s}(q_{d} * q_{a}^{-1}) + k_{d}(\omega_{d} -\omega_{a}),
 \label{eq:toquepd3d}
\end{equation}
%
\noindent onde $q_{a}$ é o quatérnio atual da junta, definido pela orientação do corpo filho relativa ao corpo pai, %em coordenadas globais,
$q_{d}$ é o quatérnio desejado da junta, obtido a partir de dados de MoCap ou definido pelo usuário, $\omega_{a}$ é a velocidade
angular atual da junta e $\omega_{d}$ é a velocidade angular desejada da junta. A velocidade angular da junta é definida pela subtração da velocidade angular
do corpo filho pela velocidade angular do corpo pai ($\omega_{filho}$ - $\omega_{pai}$).
A velocidade angular desejada da junta também é obtida a partir de dados de MoCap, por diferenças finitas, ou definida como zero.
A expressão $q_{d} * q_{a}^{-1}$ corresponde à versão tridimensional da diferença angular mostrada na Equação \ref{eq:toquepd}.
O quatérnio resultante ainda precisa ser convertido para a representação eixo e ângulo.
$k_{s}$ e $k_{d}$ são as matrizes de rigidez (proporcional) e de amortecimento (derivativo), respectivamente.
Elas são definidas pelo usuário, em coordenadas das juntas, como matrizes diagonais:
%
\begin{equation}
 k_{s} = \left( \begin{array}{ccc} k_{s}^{x} & 0 & 0 \\ 0 & k_{s}^{y} & 0 \\ 0 & 0 & k_{s}^{z}\end{array} \right) 
\quad\mathrm{e}\quad
 k_{d} = \left( \begin{array}{ccc} k_{d}^{x} & 0 & 0 \\ 0 & k_{d}^{y} & 0 \\ 0 & 0 & k_{d}^{z}\end{array} \right) 
 \label{eq:kskd}
\end{equation}

É importante lembrar que, antes de realizar as operações, todas as informações devem estar definidas em um mesmo sistema de coordenadas.
Aplicar o torque calculado para a junta $i$ corresponde a aplicar um torque positivo, $^{i}\tau_{pd}$, no seu corpo filho e um torque negativo, -$^{i}\tau_{pd}$, no seu corpo pai.
%da junta $i$, fazendo com que após alguns passos da simulação a orientação desejada seja alcançada ou mantida.
Para mais detalhes sobre controladores PD para juntas esféricas, usar \cite{bib:NunesTese12} como referência.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Controlador de Equilíbrio}\label{controlequilibrio}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\noindent Como já discutido, o controle de equilíbrio é exigido pelo fato de que os DOFs globais do personagem não possuem atuadores diretos.
Neste trabalho, assim como em muitos outros \cite{bib:Coros10,bib:GeijtenbeekState12,bib:Geijtenbeek12}, %outros trabalhos que tratam equilíbrio
o tratamento de equilíbrio é facilitado pelo uso de uma camada de abstração entre o controle virtual do COM e o controle interno das juntas.
Resumidamente, uma matriz Jacobiana é utilizada para converter forças e torques virtuais, relacionados ao COM, em torques internos %virtual/intuitivo %relacionados ao/influenciando o
equivalentes nas juntas. %equivalentes/correspondentes
Esta seção é dividida em três partes principais: cálculo da matriz Jacobiana usada, cálculo da força virtual e cálculo do torque virtual. %cálculo/montagem/construção

%------------------------------------

\subsection{Construção da Jacobiana}

\noindent No contexto de animação de personagens, a matriz Jacobiana geralmente descreve o relacionamento linear entre a velocidade de um ponto específico do personagem (efetor final)
e as velocidades das juntas que influenciam esse ponto, de acordo com uma hierarquia pré-definida.
Ou seja, a Jacobiana define o quanto esse ponto se desloca, em função de um deslocamento correspondente em coordenadas das juntas.
No tratamento de equilíbrio, faz sentido que o COM do personagem seja escolhido como esse ponto específico.
Assim, usando a transposta dessa Jacobiana, a posição global do personagem pode ser controlada através de uma força virtual no COM.

Entretanto, duas observações podem ser destacadas.
%
Primeiro, os DOFs globais do personagem (os que não possuem atuadores diretos) não se resumem apenas a sua posição global. %Sua orientação global também merece atenção.
%Portanto, é interessante que a Jacobiana também considere a velocidade angular do personagem relativo ao COM, de maneira unificada.
Portanto, em contraste com \cite{bib:Coros10} por exemplo, seria interessante se a orientação global também fosse considerada na construção da Jacobiana.
Mais interessante ainda seria se orientação e posição globais fossem consideradas juntas, de maneira unificada.
%\cite{bib:Geijtenbeek12} utiliza uma Jacobiana separada para tratar orientação global.
\cite{bib:Geijtenbeek12} trata orientação e posição globais, mas de maneira separada.
%
%Como considerar a influência de todos os corpos no COM?
Segundo, considerar o COM como um simples efetor final no cálculo da Jacobiana significa assumir que apenas algumas juntas possuem %parte da estrutura do personagem possui
influência sobre ele, o que não é verdade.
Além disso, como o COM é um ponto virtual, ele não necessariamente se localiza sobre a estrutura do personagem e, consequentemente, fica complicado determinar a que parte
da hierarquia ele pertence e quais juntas devem influenciá-lo na construção da Jacobiana.

Para tratar o primeiro caso, propõe-se utilizar \emph{vetores espaciais 6D} \cite{bib:Cline99,bib:NunesTese12} em toda a formulação relacionada à Jacobiana.
Ou seja, informações angulares e lineares são concatenadas em vetores de seis coordenadas. %concatenadas/agrupadas
Uma das vantagens dessa notação 6D é que transformações entre sistemas de coordenadas são realizadas mais diretamente, através do uso de \emph{matrizes de transformação adjuntas}.
%
No segundo caso, em vez de considerar o COM como um simples efetor final, todos os corpos são considerados como efetores finais.
Isso significa que cada corpo possui uma Jacobiana individual. %individual/independente.
As velocidades de todos os corpos, assim como suas Jacobianas individuais, são então combinadas proporcionalmente, de acordo com suas massas, %combinadas/somadas
para calcular o momento total do personagem relativo ao seu COM.
Usando a notação 6D, o momento do personagem corresponde à concatenação dos seus momentos angular e linear.
Por fim, para obter as velocidades angular e linear do personagem relativas ao seu COM, basta dividir seu momento total pela sua massa total.

Note que essa \emph{Jacobiana espacial 6D baseada em momento}, $J$, é mais geral, descrevendo um relacionamento linear entre a \emph{velocidade 6D} relativa ao COM do personagem
e as \emph{velocidades 6D} de \textbf{todas} as suas juntas:
%
%\begin{equation}
% \prescript{com}{}{\left( \begin{array}{c} \omega \\ v \end{array}  \right)} = J \left( \begin{array}{c}
%                                                                  \prescript{j_{0}}{}{\left(\begin{array}{c} \omega \\ v \end{array}  \right)}
%                                                                  \\
%                                                                  \prescript{j_{1}}{}{\left(\begin{array}{c} \omega \\ v \end{array}  \right)}
%                                                                  \\
%                                                                  \vdots
%                                                                  \\
%                                                                  \prescript{j_{n-1}}{}{\left(\begin{array}{c} \omega \\ v \end{array}  \right)}
%                                                                  \end{array}
% \right),
% \label{eq:jacobianaini}
%\end{equation}
%
\begin{equation}
 \left[ ^{com} \phi _{com}  \right]_{6x1} = \left[ J \right]_{6x6n} \left[ \begin{array}{c} ^{j_{0}} \phi _{j_{0}} \\
                                                                                            ^{j_{1}} \phi _{j_{1}} \\
                                                                                                    \vdots         \\
                                                                                            ^{j_{n-1}} \phi _{j_{n-1}} \end{array} \right]_{6nx1}
                                          = \left[ J \right]_{6x6n} \left[ \dot\theta \right]_{6nx1}
 \label{eq:jacobiana}
\end{equation}
%
onde $^b\phi_a$ representa a \emph{velocidade 6D} de $a$ em coordenadas de $b$, $n$ corresponde ao número total de juntas do personagem, e
$\dot\theta$ corresponde apenas a uma notação abreviada desse vetor de dimensão 6nx1.
Note que $\phi = {\left( \begin{array}{c} \omega \\ v \end{array}  \right)}$, onde $\omega$ corresponde a uma velocidade angular e $v$ corresponde a uma velocidade linear.
%
Isso significa que o controle virtual dos DOFs globais envolve o personagem como um todo, e não apenas os seus
membros inferiores, como em \cite{bib:Geijtenbeek12}.

%Antes de calcular o momento total do personagem, uma rápida revisão sobre matrizes de transformação adjuntas pode ser útil.
Como mencionado, para calcular o momento total do personagem, antes é necessário entender como calcular as Jacobianas individuais de cada um dos seus corpos.
Para isso, um método bastante direto consiste no uso de matrizes de transformação adjuntas.
Portanto, uma rápida revisão sobre o assunto pode ser útil.
%
Uma matriz adjunta, $^{b}_{a}Ad$, de dimensão 6x6, transforma uma velocidade 6D, $^a\phi$, dada em coordenadas de $a$,
em uma velocidade 6D correspondente, $^b\phi$, dada em coordenadas de $b$: $^b\phi = ^{b}_{a}Ad ~ ^a\phi$.
$^{b}_{a}Ad$ é facilmente construída a partir da matriz de transformação homogênea correspondente $^{b}_{a}T$:
%
\begin{equation}
 %\left( \begin{array}{c} ^{w}\omega \\ ^{w}v \end{array} \right) = _{i}^{w}Ad \left( \begin{array}{c} ^{i} \omega \\ ^{i} v \end{array} \right)
 %\quad \mathrm{, onde}\quad
 ^{b}_{a} T = \left[ \begin{array}{cc} R & p \\   0  & 1 \end{array} \right], \quad
 ^{b}_{a}Ad = \left[ \begin{array}{cc} R & 0 \\ \left[p\right]R & R \end{array} \right],
\end{equation}
%
onde $[p]$ corresponde à matriz anti-simétrica, de dimensão 3x3, equivalente ao produto vetorial $p\times$:
%
\begin{equation}
 [p] = p\times = \left[ \begin{array}{ccc} 0 & -p_{z} & p_{y} \\ p_{z} & 0 & -p_{x} \\ -p_{y} & p_{x} & 0  \end{array} \right],
\end{equation}
%
onde $p_{x}$, $p_{y}$ e $p_{z}$ são as coordenadas do vetor $p$.
%
Note que a inversa transposta de $^{b}_{a}Ad$ transforma \emph{forças 6D}: $^{b}w = {^{b}_{a}Ad^{-T}} ~ ^{a}w$, onde $w$ representa uma força 6D.
Tem-se também que: $^{a}w = {^{b}_{a}Ad^{T}} ~ ^{b}w$.
Note que $w = {\left( \begin{array}{c} \tau \\ f \end{array}  \right)}$, onde $\tau$ corresponde a um torque e $f$ corresponde a uma força.

Considerando que, de acordo com uma determinada hierarquia, um corpo específico $b$ é influenciado por um conjunto de juntas, a velocidade 6D desse corpo $b$ pode ser
obtida pelo somatório das velocidades 6D de todas essas juntas:
%
\begin{equation}
 ^{b}\phi_{b} = \sum_j {^{b}\phi_{j}} = \sum_j {^{b}_{j}Ad} ~ {^{j}\phi_{j}} = J_{b}\dot\theta,
 \label{eq:jacobianaindividual}
\end{equation}
%
onde o somatório em $j$ inclui todas as juntas que influenciam o corpo $b$, $J_{b}$ corresponde à Jacobiana individual do corpo $b$, e
$\dot\theta$ está definido na Equação \ref{eq:jacobiana}.
Note que, com o objetivo de isolar o vetor $\dot\theta$ completo à direita, esse somatório em $j$ pode ser substituído pela multiplicação de $J_{b}$ por $\dot\theta$.
Portanto, $J_{b}$ corresponde a uma matriz, de dimensão 6x6n, contendo essas matrizes adjuntas dispostas horizontalmente nos locais correspondentes às suas respectivas juntas
incluídas no somatório.
%
Para ficar mais claro, considere, por exemplo, um personagem que possui 13 juntas. Considere também que, de acordo com a hierarquia adotada, um corpo $b$ é influenciado pelas
juntas $j_{0}$, $j_{1}$, $j_{2}$, $j_{6}$, $j_{7}$ e $j_{9}$. A Jacobiana individual desse corpo $b$ é definida como segue:
%
\begin{equation}
 ^{b}\phi_{b} = \left[ \begin{array}{ccccccccccccc} _{ j_{0} }^{b}Ad & _{ j_{1} }^{b}Ad & _{ j_{2} }^{b}Ad & 0 & 0 & 0 & _{ j_{6} }^{b}Ad & _{ j_{7} }^{b}Ad & 0 & _{ j_{9} }^{b}Ad & 0 & 0 & 0
                       \end{array} \right] ~ \dot\theta.
\end{equation}
%
Nos locais correspondentes às juntas que não influenciam o corpo $b$, são colocadas matrizes nulas de dimensão 6x6.
%
Para facilitar a implementação, uma determinada hierarquia pode ser representada por uma tabela relacionando todos as juntas (linhas) a todos os corpos (colunas) do personagem.
Cada célula dessa tabela é preenchida com 0 (zero) ou 1 (um), de acordo com a hierarquia. Preencher uma célula com 1 significa que a junta correspondente àquela linha influencia
o corpo correspondente àquela coluna. Caso contrário, a célula deve ser preenchida com 0. %(ver Apêndice \ref{ap:hierarquia}). %(ver Apêndices \ref{ap:modelo} e \ref{ap:hierarquia}).
%
Note que a hierarquia do personagem é atualizada, em cada passo da simulação, de acordo com os contatos entre os pés e o solo.
O Apêndice \ref{ap:hierarquia} mostra as possíveis hierarquias utilizadas.

%Detalhe de implementação: achei melhor omitir
%Considerando que, em cada instante da simulação, os sistemas de coordenadas das juntas são sempre definidos alinhados com o sistema de coordenadas global, %do mundo,
%a matriz adjunta $_{j}^{w}Ad$ pode ser simplificada da seguinte maneira:
%\begin{equation}
%  _{j}^{w}Ad = \left( \begin{array}{cc} I & 0 \\ \left[p\right]I & I \end{array} \right),
%\end{equation}
%\noindent onde $p$ corresponde à posição da junta $j$ em coordenadas globais e $I$ é a matriz identidade de dimensão 3x3.

%A ideia é fazer com que o controlador opere nos momentos angular e linear do Centro de Massa do personagem.
Após entender como obter as Jacobianas individuais de todos os corpos, é necessário entender como obter o momento total do personagem relativo ao seu COM, em função do vetor $\dot\theta$.
Note que o momento individual de um corpo $b$ pode ser dado por:
%
\begin{equation}
 \prescript{b}{}{ \left(\begin{array}{c} L \\ P \end{array}\right)}_b = \prescript{b}{}{ \left(\begin{array}{c} \mathcal{I} \cdot \omega \\ m\cdot v \end{array}\right)}_b
                                                                      = (^{b}_{b}M)(^{b}\phi_{b}),
 \label{eq:04LP}
\end{equation}
%
onde $L$ é o seu momento angular, $P$ é o seu momento linear, $\mathcal{I}$ é a sua inércia, $\omega$ é a sua velocidade angular, $m$ é a sua massa e $v$ é a sua velocidade linear.
A matriz $^{b}_{b}M$, de dimensão 6x6, por estar definida em coordenadas locais do corpo, pode ser convenientemente definida como uma matriz diagonal:
%
\begin{equation}
    _{b}^{b}M = \left[ \begin{array}{cc} \mathcal{I} & 0 \\ 0 & m_{b} I \end{array} \right] = \left[ \begin{array}{cccccc} \mathcal{I}_{xx} & 0 & 0 & 0 & 0 & 0\\ 0 & \mathcal{I}_{yy} & 0 & 0 & 0 & 0\\ 0 & 0 & \mathcal{I}_{zz} & 0 & 0 & 0 \\ 0 & 0 & 0 & m_{b} & 0 & 0 \\ 0 & 0 & 0 & 0 & m_{b} & 0 \\ 0 & 0 & 0 & 0 & 0 & m_{b} \end{array} \right],
    \label{eq:inerciamassa}
\end{equation}
%
onde $m_{b}$ é a massa do corpo $b$.

A partir das Equações \ref{eq:04LP} e \ref{eq:jacobianaindividual}, tem-se:
%
\begin{equation}
 \prescript{b}{}{ \left(\begin{array}{c} L \\ P \end{array}\right)}_b = (^{b}_{b}M) J_{b}\dot\theta.
 \label{eq:04LPdottheta}
\end{equation}
%

Definido o momento individual do corpo $b$ em função do vetor $\dot\theta$, em coordenadas locais do corpo, ainda falta convertê-lo em coordenadas do COM:
%
\begin{equation}
 \prescript{com}{}{ \left(\begin{array}{c} L \\ P \end{array}\right)}_b = (^{b}_{com}Ad)^{T} (^{b}_{b}M) J_{b}\dot\theta.
 \label{eq:04LPdottheta}
\end{equation}
%
Note que momentos 6D, assim como forças 6D, são transformados com a inversa transposta da matriz adjunta.
Agora só falta somar os momentos individuais de todos os corpos do personagem para obter o momento total do personagem relativo ao seu COM:
%
\begin{equation}
 \prescript{com}{}{ \left(\begin{array}{c} L \\ P \end{array}\right)}_{total} = \sum_b (^{b}_{com}Ad)^{T} (^{b}_{b}M) J_{b}\dot\theta,
 \label{eq:04LPdottheta}
\end{equation}
%
onde o somatório em $b$ inclui todos os corpos do personagem.

%Atentam-se detalhes em alguns termos: 
%\begin{equation}
% _{com}^{b}Ad = \left( \begin{array}{cc} R^{-1} & 0 \\ $\^p$R^{-1} & R^{-1}  \end{array}  \right),
% \label{eq:adjuntacorpo}
%\end{equation}
%\noindent representa a matriz adjunta do corpo $b$, $R^{-1}$ é a matriz inversa de rotação do corpo $b$ de dimensão 3x3 e
%$p = R^{-1}*(com - pos_{b})$, sendo $pos_{b}$ a posição corrente do corpo em coordenadas globais e $com$ a posição do Centro de Massa do personagem, $p$ possui dimensão 3x1.
%O termo $Ad_{w}^{b}$ é calculado da mesma forma que na Equação (\ref{eq:adjuntacorpo}) com a diferença de que $p = R^{-1}*(-pos_{b})$.

Por fim, basta obter as velocidades angular e linear do personagem relativas ao seu COM.
Por definição, tem-se que:
%
\begin{equation}
 \prescript{com}{}{ \left(\begin{array}{c} L \\ P \end{array}\right)_{total}} = (^{com}_{total}M) (^{com}\phi _{com}).
\end{equation}
%
E isolando $^{com}\phi _{com}$, obtem-se:
%
\begin{equation}
 ^{com}\phi _{com} = (^{com}_{total}M)^{-1} \prescript{com}{}{ \left(\begin{array}{c} L \\ P \end{array}\right)_{total}}.
 \label{eq:phicom}
\end{equation}
%
Finalmente, a partir das Equações (\ref{eq:phicom}), (\ref{eq:04LPdottheta}) e (\ref{eq:jacobiana}), chega-se a expressão final de $J$:
%
\begin{equation}
 J = (^{com}_{total}M)^{-1} \sum_b (^{b}_{com}Ad)^{T} (^{b}_{b}M) J_{b},
\end{equation}
%
onde:
%
\begin{equation}
 ^{com}_{total}M = \sum_b (_{com}^{b}Ad)^{T} (_{b}^{b}M) (_{com}^{b}Ad).
\end{equation}
%
O que a operação $(^{b}_{com}Ad)^{T}(^{b}_{b}M)(^{b}_{com}Ad)$ faz é transformar a matriz de massa 6D, dada em coordenadas locais do corpo $b$, em coordenadas do COM
%(para mais detalhes sobre transformações de matrizes, ver \cite{bib:NunesTese12}).
%(ver \cite{bib:NunesTese12}).
\cite{bib:NunesTese12}.

Calculada a Jacobiana $J$, deseja-se determinar as forças 6D internas a serem aplicadas nas juntas do personagem, de acordo com a força 6D virtual relativa ao COM.
Lembre que a força 6D virtual consiste do torque virtual e da força virtual concatenados (ver Subseções \ref{forcavirtual} e \ref{torquevirtual}).
Portanto, considerando a Equação \ref{eq:jacobiana}, pode-se usar a transposta de $J$ como segue:
%
\begin{equation}
 \left[ \begin{array}{c} ^{j_{0}} w _{j_{0}} \\
                         ^{j_{1}} w _{j_{1}} \\
                               \vdots        \\
                         ^{j_{n-1}} w _{j_{n-1}} \end{array} \right]_{6nx1} = \left[ J^T \right]_{6nx6} \left[ ^{com} w _{com}  \right]_{6x1}.
 \label{eq:jacobianatransp}
\end{equation}
%
%\begin{equation}
% \left( \begin{array}{c}
%                                                                  \prescript{j_{0}}{}{\left(\begin{array}{c} \tau \\ f \end{array}  \right)}
%                                                                  \\
%                                                                  \prescript{j_{1}}{}{\left(\begin{array}{c} \tau \\ f \end{array}  \right)}
%                                                                  \\
%                                                                  \vdots
%                                                                  \\
%                                                                  \prescript{j_{n-1}}{}{\left(\begin{array}{c} \tau \\ f \end{array}  \right)}
%                                                                  \end{array}
%                                                                  \right)_{eq}
% = J^{t} \cdot \prescript{com}{}{ \left( \begin{array}{c} \tau \\ f \end{array} \right)}.
%\end{equation}

Note que, como as juntas usadas são esféricas, dessas forças 6D internas obtidas, apenas os torques são necessários.
As coordenadas correspondentes a forças são simplesmente ignoradas.
%O subscrito $eq$ indica que o $wrench$ é utilizado para o equilíbrio.
Assim, o torque a ser aplicado na junta $i$ do personagem, em cada instante da simulação, é calculado como:
%
\begin{equation}
  ^{i}\tau_{total} = ^{i}\tau_{pd} + ^{i}\tau_{eq},
\end{equation}
%
onde $^{i}\tau_{eq}$ corresponde ao torque proveniente da força 6D interna obtida para a junta $i$, através da Equação \ref{eq:jacobianatransp}.
%
%Logo mais, são informados os cálculos realizados para determinar a força virtual e o torque virtual a serem aplicados na JT.

%------------------------------------

\subsection{Força Virtual} \label{forcavirtual}

\noindent A expressão da força virtual (FV) possui três termos principais.
%
O primeiro termo é responsável por manter o COM do personagem sobre o seu polígono suporte.
Embora teoricamente formado pelo fecho convexo de todos os pontos de contato entre o personagem e o chão,
%o polígono suporte é geralmente substituído por um único ponto, aqui chamado de ponto suporte, $p_{sup}$.
o polígono suporte pode ser simplificado e substituído por um único ponto, aqui chamado de ponto suporte, $p_{sup}$.
%Para simplificar os cálculos, o polígono suporte é geralmente substituído por um único ponto, aqui chamado de ponto suporte, $p_{sup}$.
 %Como uma simplificação, um único ponto, pertencente a esse fecho convexo, é escolhido como referência, representando a base de suporte.
 %Essa base de suporte é geralmente simplificada, passando a ser representada por um único ponto, aqui chamado de ponto base.
 %Isso significa que o COM deve ser mantido sobre o ponto suporte escolhido.
 %Isso significa que o COM precisa ser comparado apenas ao ponto suporte escolhido.
 %Portanto, basta comparar o COM ao $p_{sup}$.
%
Um controlador PD é usado para corrigir a posição e a velocidade do COM. No caso geral, tem-se:
%
\begin{equation}
  %f_{controle} = k_{fs}[(^{mo}pos_{d}\bot - ^{mo}pos_{com}\bot)-(pos_{d}\bot - pos_{com}\bot)] + k_{fd}(^{mo}v_{com}\bot - v_{com}\bot),
  f_{controle} = k_{fs} \left( {p_{com}}_d - {p_{com}}_a \right) + k_{fd} \left( {v_{com}}_d - {v_{com}}_a \right),
  \label{eq:forcacontrole}
\end{equation}
%
onde ${p_{com}}_d$ e ${p_{com}}_a$ são as posições desejada e atual do COM, ${v_{com}}_d$ e ${v_{com}}_a$ são as velocidades lineares desejada e atual do COM,
e $k_{fs}$ e $k_{fd}$ são constantes definidas pelo usuário.
%
%Informações projetadas horizontalmente
Note que manter o COM sobre o ponto suporte não implica em controle vertical algum. Portanto, apenas as projeções horizontais dessas informações devem ser usadas.

Caso nenhum movimento de referência seja utilizado, todas as informações são obtidas a partir da simulação.
Além disso, a posição e a velocidade desejadas do COM correspondem ao ponto suporte (${p_{com}}_d = p_{sup}$) e a zero (${v_{com}}_d = 0$), respectivamente.
%f_{controle} = k_{fs} \left( ^{sim}p_{sup} - ^{sim}p_{com} \right) + k_{fd} \left( 0 - {^{sim}v_{com}} \right),
%
Já quando um movimento capturado é usado como referência, a posição e a velocidade do COM na simulação são comparadas com a posição e a velocidade do COM no movimento capturado:
%
\begin{equation}
  f_{controle} = k_{fs} \left( {^{mo}\hat{p}_{com}} - {^{sim}\hat{p}_{com}} \right) + k_{fd} \left( {^{mo}v_{com}} - {^{sim}v_{com}} \right),
  \label{eq:forcacontrole}
\end{equation}
%
onde ${^{mo}\hat{p}_{com}}$ e ${^{sim}\hat{p}_{com}}$ são as posições relativas do COM, no movimento capturado e na simulação, respectivamente.
Note que considerar posições absolutas significaria amarrar a posição global do personagem simulado ao movimento capturado.
Portanto, essas posições devem ser calculadas relativas aos respectivos personagens, o usado para reproduzir o movimento capturado e o simulado.
%Note que cada posição é calculada relativa ao seu ponto suporte correspondente: ${\hat{p}_{com}} = p_{com} - p_{sup}$.
Os pontos suportes desses personagens são usados como pontos de referência no cálculo dessas posições relativas: ${\hat{p}_{com}} = p_{com} - p_{sup}$.
%
Assim, o controlador usado suporta translações horizontais do personagem simulado.
Por exemplo, quando um movimento capturado cíclico de caminhar é usado, o personagem simulado pode caminhar continuamente,
apesar da descontinuidade da posição global horizontal do personagem no movimento capturado.
%Já quando a direção do caminhar é modificada, as informações (posição e velocidade) também devem ser rotacionadas verticalmente, de acordo com a nova direção.
%A nova direção define um novo sistema de coordenadas do personagem. O eixo vertical sempre é mantido fixo. Um eixo horizontal inicial deve ser definido (e.g. z positivo).
%A direção (e o sistema de coordenadas novo) é modificada de acordo com um ângulo entre o novo z+ e o z+ inicial.

%Verificar na implementação:
 %$^{mo}p_{sup}$ e $^{sim}p_{sup}$ estão usando o mesmo sensor (ou seja, estão na mesma situação de contato)?
  %mesmo qnd no mocap os 2 pes estao no chao, e na simulacao um pe esta no chao mas o outro ainda esta chegando, o $^{sim}p_{sup}$ usa o ponto medio, assim como o $^{mo}p_{sup}$?
  %note que o $^{sim}p_{sup}$ poderia usar apenas o com do pe no chao, ja que o outro pe ainda estaria no ar (possibilidade indesejada).
 %ao modificar a direção do caminhar, todas as informações estão sendo rotacionadas? até as da equação $f_{controle}$ ($\hat{p}_{com}$ e $v_{com}$)?

Note que a escolha do ponto suporte pode variar. %, de acordo com o propósito do controlador.
Uma opção seria usar o centro do fecho convexo, mas isso exigiria cálculos desnecessários para o propósito deste trabalho.
Escolhas mais simples, baseadas nas posições dos tornozelos ou dos COM's dos pés, são normalmente suficientes \cite{bib:Abe07,bib:Geijtenbeek12}.
%
Neste trabalho, a escolha do ponto suporte depende da situação de contato entre o personagem e o chão, de acordo com a Figura \ref{fig:posdesejada}.
Caso um único pé esteja em contato com o chão, $p_{sup}$ é calculado como o COM desse pé de apoio, projetado horizontalmente.
Caso os dois pés estejam em contato com o chão, $p_{sup}$ é calculado como o ponto médio entre os COM's dos dois pés, também projetados horizontalmente.

\begin{figure}%[H]
     \begin{center}
     \includegraphics[width=10.18cm,height=5cm]{posdesejada.png}
     \caption{Pés vistos de cima. A cor vermelha indica que o pé está em contato com o solo. (a) Os dois pés estão em contato com o solo.
                                                                                             (b) Somente o pé direito está em contato com o solo. }
     \label{fig:posdesejada}
     \end{center}
\end{figure}
%alterações na figura: inverter partes (a) e (b) na figura (e no caption, consequentemente); atualizar pos_d para p_{sup}

O segundo termo é responsável por compensar a gravidade. Para isso, uma força vertical constante deveria ser aplicada ao COM do personagem, contrária ao seu peso.
A Jacobiana usada neste trabalho permite que essa força seja facilmente considerada como parte da força virtual:
%
\begin{equation}
  f_{g} = -\sum_b m_{b} g,
\end{equation}
%
onde o somatório em $b$ inclui todos os corpos do personagem, $m_{b}$ é a massa de cada corpo $b$ e $g$ é a aceleração da gravidade.

O terceiro e último termo é responsável por corrigir o momento linear do personagem: %, o qual é calculado como:
%
\begin{equation}
  f_{P} = k_{P} (^{mo}P - ^{sim}P), ~~
  P = \sum_b m_{b} v_{b},
\label{eq:momentoli}
\end{equation}
%
%onde $P = \sum_b m_{b} v_{b}$ e $v_{b}$ é a velocidade de cada corpo $b$.
onde $k_{P}$ é uma constante definida pelo usuário e $v_{b}$ é a velocidade de cada corpo $b$.
%$^{mo}P$ é extraído por meio de diferenças finitas.
As velocidades dos corpos no movimento capturado, $^{mo}v_{b}$, são estimadas usando diferenças finitas. %estimadas/obtidas
Na ausência de movimentos de referência, considera-se $^{mo}P = 0$.

A expressão final para a força virtual é definida como:
%
\begin{equation}
  f_{virtual} = f_{controle} + f_{g} + f_{P}.
\end{equation}

%Todas as variáveis $k_{fs}$, $k_{fd}$ e $k_{P}$ possuem 3 coordenadas (Equação \ref{eq:kss}) e podem ser escritas como matrizes diagonais.
%Esses valores são determinados pelo usuário.
%%
%\begin{equation}
% k_{fs} = \left( \begin{array}{ccc} k_{fs}^{x} & 0 & 0 \\ 0 & k_{fs}^{y} & 0 \\ 0 & 0 & k_{fs}^{z}\end{array} \right) 
%\quad\mathrm{,}\quad
% k_{fd} = \left( \begin{array}{ccc} k_{fd}^{x} & 0 & 0 \\ 0 & k_{fd}^{y} & 0 \\ 0 & 0 & k_{fd}^{z}\end{array} \right) 
% \quad\mathrm{e}\quad
% k_{ml} = \left( \begin{array}{ccc} k_{P}^{x} & 0 & 0 \\ 0 & k_{P}^{y} & 0 \\ 0 & 0 & k_{P}^{z}\end{array} \right) .
% \label{eq:kss}
%\end{equation}

%------------------------------------

\subsection{Torque Virtual} \label{torquevirtual}

%-------------------------------------------A revisar--------------------------------------------------------

%O objetivo é deslocar o COM do personagem de acordo com uma força virtual. %e o torque virtual?

\noindent O Torque Virtual (TV) é calculado tendo como base qual o corpo do personagem se deseja manter uma determinada orientação.
Essa orientação pode ser informada por dados de MoCap ou definida pelo usuário. O cálculo do torque
virtual foi dividido em duas partes: controle da orientação do corpo e momento angular do personagem no Centro de Massa.

O torque do controle da orientação do corpo tem a seguinte expressão:
\begin{equation}
 ^{b}\tau_{controle} = k_{ts}(q_{des}\times q_{a}^{-1}) + k_{td}(\omega_{des}-\omega_{a}),
 \label{eq:controletorque}
\end{equation}
\noindent de forma análoga a aplicação do controlador PD (Equação (\ref{eq:toquepd3d})), sendo $q_{des}$ o quatérnio desejado para o corpo $b$, em coordenadas globais,
$q_{a}$ o quatérnio atual do corpo $b$, em coordenadas globais, e $\omega_{des}$ e $\omega_{a}$ a velocidade angular desejada e a velocidade angular atual do corpo $b$ respectivamente.

%Danilo: versao anterior
\indent O momento angular do personagem no Centro de Massa é descrito como:
\begin{equation}
  M_{\omega} = k_{ma} * \sum_{b}^{k} \left( MomAng_{b} + (pos_{b}-com)\times((v_{b}-v_{com})*m_{b})  \right),
\end{equation}
\noindent onde $MomAng_{b}$ é o momento angular, $pos_{b}$ é a posição, $v_{b}$ é a velocidade linear e $m_{b}$ é a massa do corpo $b$, $com$ é a
posição e $v_{com}$ é a velocidade linear do COM do personagem. A operação $\times$ define um produto vetorial.

%Danilo: versao atual
\indent O momento angular do corpo $b$ do personagem no Centro de Massa é descrito como:
\begin{equation}
  M_{\omega\_erro} =  k_{ma}(^{mocap}M_{\omega} - ^{sim}M_{\omega}),
  \label{eq:momentoang}
\end{equation}
\begin{equation}
  \mathrm{sendo}\quad
  M_{\omega} = \sum_{b}^{k} \left( MomAng_{b} + (pos_{b}-COM)\times((v_{b}-v_{com})\cdot m_{b})  \right),
\end{equation}
\noindent onde $MomAng_{b}$ é o momento angular, $pos_{b}$ é a posição, $v_{b}$ é a velocidade linear e $m_{b}$ é a massa do corpo $b$. $COM$ é a
posição e $v_{com}$ é a velocidade linear do COM do personagem. O $^{mocap}M_{\omega}$ é extraído por meio de diferenças finitas. 
Na ausência dos dados de Mocap o valor para $^{mocap}M_{\omega}$ será um vetor nulo.

\indent A expressão para o torque virtual fica escrita da seguinte maneira:
\begin{equation}
  \tau_{virtual} =  ^{b}\tau_{controle} + M_{\omega\_erro}.
\end{equation}

Todas as variáveis $k_{ts}$, $k_{td}$ e $k_{ma}$ possuem 3 coordenadas (Equação (\ref{eq:kst})) e podem ser escritas como matrizes diagonais.
Esses valores podem ser determinados pelo usuário.

\begin{equation}
 k_{ts} = \left( \begin{array}{ccc} k_{ts}^{x} & 0 & 0 \\ 0 & k_{ts}^{y} & 0 \\ 0 & 0 & k_{ts}^{z}\end{array} \right) 
\quad\mathrm{,}\quad
 k_{td} = \left( \begin{array}{ccc} k_{td}^{x} & 0 & 0 \\ 0 & k_{td}^{y} & 0 \\ 0 & 0 & k_{td}^{z}\end{array} \right) 
 \quad\mathrm{e}\quad
 k_{ma} = \left( \begin{array}{ccc} k_{ma}^{x} & 0 & 0 \\ 0 & k_{ma}^{y} & 0 \\ 0 & 0 & k_{ma}^{z}\end{array} \right) .
 \label{eq:kst}
\end{equation}

%-------------------------------------------A revisar--------------------------------------------------------

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Modelo Simplificado do Pé}\label{simplespe}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%\noindent A fim de se produzir bons resultados foi utilizada a adoção de um modelo simplificado do pé para manutenção do equilíbrio.
%Esse modelo é uma representação desacoplada do modelo simulado do pé.
%Aqui, o modelo simplificado do pé tem uma estrutura cilíndrica (pé redondo) ao qual serão determinados
%por meio de alguns de seus valores, o torque que será compensado no torque concebido no controlador da Seção \ref{controlequilibrio} gerado no pé do personagem.
%Vendo-se que o impacto do torque no pé que está em contato com o solo poderá gerar instabilidade no personagem.
%Uma alternativa simplificada e eficaz é considerar que parte do torque que seria aplicado no pé sobre solo será absorvida, como acontece na realidade.
%O usuário definirá uma espécie de cone de fricção que determina o módulo do torque máximo a ser compensado. 

%Na Figura \ref{fig:conefriccao}, observa-se o esquema do pé simplificado. Onde $h$ é a distância do solo ao COM do pé, $r$ é o raio do pé, $m$ é o modulo do vetor $GRFmax$ e
%$\theta$ é o ângulo do cone de fricção. Esses paramêtros são definidos pelo usuário. Dessa forma deseja-se encontrar o torque máximo compensável no pé simulado de acordo com
%%o torque adquirido neste pé redondo da seguinte forma:
%o esquema da Figura \ref{fig:conefriccao}:

\noindent O objetivo desta seção é explicar detalhadamente a geometria paramétrica proposta, utilizada como um modelo simplificado do pé de apoio.
Primeiramente, é importante perceber que a ideia de desvincular a geometria do pé usada na simulação da sua interação com o chão introduz uma representação abstrata dessa interação,
a qual está relacionada à geometria paramétrica proposta.
A estrutura dessa representação, a qual define o significado dos parâmetros, não é única.
%A única exigência é que essa representação abstrata seja coerente em relação à compensação do torque aplicado no pé.
A única exigência é que haja coerência em relação à compensação do torque aplicado no pé.
Afinal, a estrutura definida e a escolha dos parâmetros deve determinar quanto do torque aplicado no pé deve ser compensado.
Além disso, deseja-se que a manipulação desses parâmetros seja simples. %simples/fácil/intuitiva
Portanto, embora seja necessário definir uma estrutura específica, a contribuição de se usar uma representação abstrata desvinculada vai além dos limites impostos pela
estrutura particular escolhida. A estrutura escolhida neste trabalho é descrita a seguir.

\begin{figure}[h]%[!htbp]
     \begin{center}
     \includegraphics[height=3.5cm]{conefriccao.png}
     %\caption{Cone de Fricção para um pé cilíndrico. (a) Vista superior. (b) Vista lateral.}
     \caption{Modelagem de contato utilizada para o pé de apoio, baseada no cone de fricção de Coulomb. (a) Vista superior do pé. (b) Vista lateral do pé.}
     \label{fig:conefriccao}
     \end{center}
\end{figure}

Por questão de simplicidade, algumas restrições na estrutura usada são definidas.
Primeiro, a geometria escolhida para representar o pé possui um formato cilíndrico, como ilustrado na Figura \ref{fig:conefriccao}.
%Analisando
Assumindo o formato ilustrado, pode-se prever a situação extrema em que o máximo de torque no pé seria compensado,
a qual corresponde a uma força resultante de reação do chão sendo aplicada em uma extremidade do contato do cilindro com o chão.
Devido à simetria do cilindro, sem perda de generalidade, pode-se assumir que essa força resultante é aplicada na extremidade mais à direita do círculo correspondente
à área de contato entre o cilindro e o chão.
Baseado no \emph{cone de fricção de Coulomb} posicionado nesse ponto de contato extremo, assume-se também que a força resultante capaz de compensar o máximo de torque no pé
está de acordo com o esquema ilustrado na Figura \ref{fig:conefriccao}, na qual observa-se um vetor, $GRFmax$, situado no limite do cone definido pelo ângulo $\theta$.
Considerando que o pé possui densidade uniforme, ainda é necessário definir as dimensões do cilindro e um módulo máximo para o vetor $GRFmax$.
Assim, pode-se calcular o torque máximo compensável, $\tau_{comp}$, como:
%
\begin{equation}
  \tau_{comp} = GRF_{max} \times D_{com} = \left( \begin{array}{c}  mcos\theta \\ msen\theta \\ 0 \end{array} \right) \times \left( \begin{array}{c}  -r \\ h \\ 0 \end{array} \right),
\end{equation}
%
onde $h$ é a distância do solo ao COM do pé, $r$ é o raio do pé, $m$ é o módulo do vetor $GRFmax$ e $\theta$ é o ângulo do cone de fricção.
%
É importante enfatizar que esses quatro paramêtros são definidos pelo usuário.
E é através da escolha dos valores desses parâmetros que o usuário é capaz de abstratamente deslizar %deslizar/transladar %abstratamente/intuitivamente
a barra ilustrada na Figura \ref{fig:EstabVsCorrFis}.

%$\tau_{comp}$ é sempre horizontal.
Considerando todas as suposições mencionadas, pode-se verificar uma limitação da estrutura escolhida: $\tau_{comp}$ é sempre horizontal e, consequentemente,
não é capaz de compensar qualquer componente vertical do torque aplicado no pé.
%Assume-se que o torque aplicado no pé em torno do eixo vertical é sempre totalmente compensado.
Novamente por questão de simplicidade, assume-se que essa componente vertical é sempre artificialmente compensada por completo.
%
%módulo
Além disso, de novo devido à simetria do cilindro, apenas o módulo do torque máximo compensável é necessário para determinar quanto do torque aplicado no pé deve ser compensado.
Para qualquer direção do torque aplicado no pé, o ponto de contato extremo e a direção do vetor $GRFmax$ podem ser adaptados convenientemente,
obtendo sempre o mesmo esquema da Figura \ref{fig:conefriccao}.

%\indent A razão de compensação do torque aplicado no pé é definida por:
\indent Considere a seguinte razão, correspondente à porcentagem do torque aplicado no pé que será compensado:
\begin{equation}
 %ratio  = \frac{\| \tau_{comp} \|}{\| \tau_{foot}\bot \|}, %1\geqslant ratio>0,
 ratio  = \frac{\| \tau_{comp} \|}{\| ^{foot}\tau_{eq}\bot \|}, %1\geqslant ratio>0,
\end{equation}
onde $^{foot}\tau_{eq}\bot$ é a projeção horizontal do torque aplicado no pé de apoio, extraído do controle de equilíbrio (Seção \ref{controlequilibrio}). %projeção/componente
$^{foot}\tau_{eq} = -^{ankle}\tau_{eq}$. $\| \tau_{comp} \| = | hmcos\theta + rmsen\theta |$.
Caso $ratio > 1$, considerar $ratio = 1$. $0 \leqslant ratio \leqslant 1$.
Portanto, o torque total aplicado no pé de apoio do personagem simulado %??? ao solo
é definido de acordo com essa razão de compensação:
\begin{equation}
  %^{foot}\tau_{total} = ^{foot}\tau_{pd} + ^{foot}\tau_{eq}*ratio.
  %^{foot}\tau_{total} = (^{foot}\tau_{pd} + ^{foot}\tau_{eq}\bot)*(1-ratio).
  ^{foot}\tau_{total} = ^{foot}\tau_{pd} + ^{foot}\tau_{eq}\bot*(1-ratio).
\end{equation}
%\indent Diferente de um modelo de contato mais complexo, tal como o utilizado por \cite{bib:Jain11}, foi utilizado esse modelo mais
%simples que promove resultados desejados, quando comparados aos resultados da simulação seguindo os dados de referência.
O usuário pode também especificar uma tolerância para a porcentagem do torque absorvido pelo pé. A estratégia de equilíbrio deve ser desativada caso a
%Esse valor estipula que o personagem deve desativar a estratégia de equilíbrio caso a
porcentagem do torque compensado ($ratio$) esteja abaixo do valor de tolerância.
Isso serve para que o personagem possa cair mais naturalmente.
%Este controle promovido pelo pé desacoplado do modelo simulado visa dar plenos poderes para o usuário determinar como a animação deve se comportar.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Considerações Finais}\label{modeloconsideracao}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\noindent Neste capítulo, foram discutidos todos os fatores que influenciam a construção do controlador usado neste trabalho,
com ênfase nos componentes relacionados ao equilíbrio do personagem. %e seguir poses definidas por dados de MoCap.
%Todos os parâmetros que alguns autores computam por meio de uma otimização \textit{off-line} como Geijtenbeek \textit{et al.} (\citeyear{bib:Geijtenbeek12}),
%são definidos pelo usuário via $interface$.
Enquanto alguns autores \cite{bib:Abe07,bib:Macchietto09,bib:Wang09,bib:Geijtenbeek12} precisam utilizar otimização, mesmo que \textit{off-line},
para que suas estratégias de equilíbrio funcionem bem, o modelo de contato simplificado proposto fornece uma possibilidade prática bastante útil %possibilidade/abordagem
para um tratamento de equilíbrio estável e fácil de ser ajustado, sem a necessidade de otimização.
%
O próximo capítulo apresenta vários estudos de caso, projetados com o intuito de avaliar o método proposto.

